package com.hz.monitoring.module.hardware.service.mcu_sys_type;

import cn.hutool.core.collection.CollectionUtil;
import com.hz.monitoring.framework.common.pojo.PageResult;
import com.hz.monitoring.module.hardware.controller.admin.mcu_sys_type.vo.*;
import com.hz.monitoring.module.hardware.convert.mcu_sys_type.McuSysTypeConvert;
import com.hz.monitoring.module.hardware.dal.dataobject.mcu_sys_type.McuSysTypeDO;
import com.hz.monitoring.module.hardware.dal.mysql.mcu_sys_type.McuSysTypeMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.List;

import static com.hz.monitoring.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.hz.monitoring.module.hardware.enums.ErrorCodeConstants.MCU_SYS_TYPE_EXISTS;
import static com.hz.monitoring.module.hardware.enums.ErrorCodeConstants.MCU_SYS_TYPE_NOT_EXISTS;

/**
 * MCU系统分类 Service 实现类
 *
 * @author lin
 */
@Service
@Validated
public class McuSysTypeServiceImpl implements McuSysTypeService {

    @Resource
    private McuSysTypeMapper mcuSysTypeMapper;

    @Override
    public Long createMcuSysType(McuSysTypeCreateReqVO createReqVO) {
        // 插入
        McuSysTypeDO mcuSysType = McuSysTypeConvert.INSTANCE.convert(createReqVO);
        List<McuSysTypeDO> list=  getMcuSysTypeList(McuSysTypeListReqVO.builder().model(createReqVO.getModel()).build());
      if (CollectionUtil.isNotEmpty(list))
          throw exception(MCU_SYS_TYPE_EXISTS);
        mcuSysTypeMapper.insert(mcuSysType);
        // 返回
        return mcuSysType.getId();
    }

    @Override
    public void updateMcuSysType(McuSysTypeUpdateReqVO updateReqVO) {
        // 校验存在
        this.validateMcuSysTypeExists(updateReqVO.getId());
        // 更新
        McuSysTypeDO updateObj = McuSysTypeConvert.INSTANCE.convert(updateReqVO);
        mcuSysTypeMapper.updateById(updateObj);
    }

    @Override
    public void deleteMcuSysType(Long id) {
        // 校验存在
        this.validateMcuSysTypeExists(id);
        // 删除
        mcuSysTypeMapper.deleteById(id);
    }

    private void validateMcuSysTypeExists(Long id) {
        if (mcuSysTypeMapper.selectById(id) == null) {
            throw exception(MCU_SYS_TYPE_NOT_EXISTS);
        }
    }

    @Override
    public McuSysTypeDO getMcuSysType(Long id) {
        return mcuSysTypeMapper.selectById(id);
    }

    @Override
    public List<McuSysTypeDO> getMcuSysTypeList(McuSysTypeListReqVO listVO) {
        return mcuSysTypeMapper.selectList(listVO);
    }

    @Override
    public PageResult<McuSysTypeDO> getMcuSysTypePage(McuSysTypePageReqVO pageReqVO) {
        return mcuSysTypeMapper.selectPage(pageReqVO);
    }

    @Override
    public List<McuSysTypeDO> getMcuSysTypeList(McuSysTypeExportReqVO exportReqVO) {
        return mcuSysTypeMapper.selectList(exportReqVO);
    }

}
